package org.ladybug.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.ladybug.dao.DAOService;
import org.ladybug.dao.persistence.Applicazione;
import org.ladybug.service.SearchService;
import org.ladybug.web.controller.model.ModelApplicativo;
import org.springframework.validation.BindException;

public class ApplicativoSearchService implements SearchService {

	private static final String ID_APPLICATIVO = "ID_APPLICATIVO";
	private static final String CODICE_APPLICATIVO = "CODICE_APPLICATIVO";
	private static final String DESCRIZIONE = "DESCRIZIONE";
	private static final String NICKNAME = "NICKNAME";
	
	private DAOService daoService;

	public Object find(BindException errors, Map params) {
		List<Applicazione> applicaziones = null;
		List<ModelApplicativo> result=new ArrayList<ModelApplicativo>();
		if (params == null) {
			params = new HashMap<String, String>();
		}
		if (params.size() > 0) {
			DetachedCriteria criteria = DetachedCriteria
					.forClass(Applicazione.class);
			// tutto in and
			if (params.get(ID_APPLICATIVO) != null) {
				Criterion crn = Restrictions.eq("idApplicativo", params
						.get(ID_APPLICATIVO));
				criteria.add(crn);
			}
			if (params.get(CODICE_APPLICATIVO) != null) {
				Criterion crn = Restrictions.eq("codiceApplicativo", params
						.get(CODICE_APPLICATIVO));
				criteria.add(crn);
			}
			if (params.get(DESCRIZIONE) != null) {
				Criterion crn = Restrictions.eq("descrizione", params
						.get(DESCRIZIONE));
				criteria.add(crn);
			}
			if (params.get(NICKNAME) != null) {
				Criterion crn = Restrictions.eq("nicknameUtente", params
						.get(NICKNAME));
				criteria.add(crn);
			}
			applicaziones = getDaoService().findByCriteria(criteria);
		}
		else{
			applicaziones = getDaoService().loadAll(Applicazione.class);
		}
		for (Applicazione applicazione : applicaziones) {
			ModelApplicativo m = new ModelApplicativo();
			m.setCodiceApplicativo(applicazione.getCodiceApplicativo());
			m.setDescrizione(applicazione.getDescrizione());
			m.setIdApplicativo(Integer.toString(applicazione.getIdApplicazione()));
			result.add(m);
		}
		return result;
	}

	public DAOService getDaoService() {
		return daoService;
	}

	public void setDaoService(DAOService daoService) {
		this.daoService = daoService;
	}

}
